/*
 * DijkstraShortestPath.h
 *
 *  Created on: Sep 25, 2009
 *      Author: jbarreneche
 */

#ifndef DIJKSTRASHORTESTPATH_H_
#define DIJKSTRASHORTESTPATH_H_

#include "EdgeCost.h"
#include "PathSolverAlgorithm.h"

namespace path {

class DijkstraShortestPath : public PathSolverAlgorithm {

public:
	/* Este objeto se encargara de destruir el EdgeCost recibido
	 * cuando sea destruido */
	DijkstraShortestPath(EdgeCost* edgeCost);
	virtual ~DijkstraShortestPath();
	/*
	 * Resuelve el problema de camino minimo para todos los vertices que poseen
	 * costo menor o igual al menor camino entre origin y destiny
	 * Devolviendo unicamente el que se encuentra entre estos dos ultimos
	 * Arroja OutOfReachException cuando no existe ningun camnio entre origin y destiny
	 */
	virtual Path* solvePath(Vertex* origin, Vertex* destiny,
			LinkedList<Vertex*> &vertices,
			LinkedList<Vertex::Edge*> &edges) throw (OutOfReachException);
	virtual double cost(Vertex::Edge* edge);
protected:
	virtual EdgeCost* getEdgeCost();
private:
	EdgeCost* edgeCost;
};

}

#endif /* DIJKSTRASHORTESTPATH_H_ */
